/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package cz.muni.fi.pb138.videolibrary.database;

import java.util.ArrayList;

/**
 *
 * @author Martin Hatina, Dominika Hoďovská
 */
public class Category {
    
    private long id;
    private String title;
    private ArrayList<Medium> media;

    /**
     * @brief konštruktor kategórie
     * @param title názov vytváranej kategórie 
     */
    
    public Category(String title) {
        this.title = title;
        media = new ArrayList<>();
    }

    /**
     * @return id kategórie
     * @brief getter parametru id
     */
    
    public long getId() {
        return id;
    }   

    /**
     * @brief setter parametru id
     * @param id nove id kategórie
     */
    
    public void setId(long id) {
        this.id = id;
    }
    
    

    /**
     * @return názov kategórie
     * @brief getter parametru title
     */
    
    public String getTitle() {
        return title;
    }
    
    /**
     * @brief setter parametru title
     * @param title nový názov kategórie
     */

    public void setTitle(String title) {
        this.title = title;
    }
    
    /**
     * @brief pridanie média do kategórie
     * @param medium pridávané médium
     */
    
    public void addMedium(Medium medium) {
        media.add(medium);
    }
    
    /**
     * @brief odobratie média z kategórie
     * @param medium odoberené médium
     */
    
    public void deleteMedium(Medium medium) {
        media.remove(media.indexOf(medium));
    }
    
    /**
     * @return list médii kategórie
     * @brief získanie dostupných médií kategórie
     */
    
    public ArrayList<Medium> getAllMedia() {
        return media;
    }
    
    /**
     * @return hash code kategórie
     * @brief generátor hash codu kategórie
     */
    
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 29 * hash + (int) (this.id ^ (this.id >>> 32));
        hash = 29 * hash + (this.title != null ? this.title.hashCode() : 0);
        return hash;
    }

    /**
     * @return boolean rovnosti objektov
     * @brief porovnanie zhodnosti objektov média
     * @param obj porovnávaný objekt
     */
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Category other = (Category) obj;
        if ((this.title == null) ? (other.title != null) : !this.title.equals(other.title)) {
            return false;
        }
        
        return true;
    }

    /**
     * @return string s atributmi kategórie
     * @brief výpis objektu typu kategória
     */
    
    @Override
    public String toString() {
        return "Category:" + title;
    }       
    
    /**
     * @return výsledok vyhladania média
     * @brief vyhladávanie média v kategórií
     * @param id id vyhladávaného média
     */
    
    public boolean containsMedium(long id) {
        for (int i = 0; i < media.size(); i++) {
            if (media.get(i).getId() == id)
                return true;
        }
        
        return false;
    }
}
